package com.huihe.framework.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 自动填充策略(Mybatis-Plus)
 * 改类和@TableField标签中fill值搭配使用
 */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * MybatisPlus 执行 Insert 方法时被调用
     * @param metaObject 访问和修改当前即将插入数据库的数据
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // 1. 设置 createTime 字段为当前时间
        if (getFieldValByName("createTime" , metaObject) == null){
            this.strictInsertFill(metaObject , "createTime" , LocalDateTime.class , LocalDateTime.now());
        }
        // 2. 设置 delFlag 字段为未删除(0:未删除   1:已删除)
        if (getFieldValByName("delFlag" , metaObject) == null){
            this.strictInsertFill(metaObject , "delFlag" , String.class , "0");
        }
        // 3. 设置 disable 字段为未禁用(0:未禁用  1:已禁用)
        if (getFieldValByName("status" , metaObject) == null){
            this.strictInsertFill(metaObject , "status" , String.class , "0");
        }

    }

    /**
     * MybatisPlus 执行 Update 方法时被调用
     * @param metaObject 访问和修改当前即将插入数据库的数据
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 1. 设置 updateTime 字段为当前时间
        if (getFieldValByName("update_time" , metaObject) == null){
            this.strictUpdateFill(metaObject , "update_time" , LocalDateTime.class , LocalDateTime.now());
        }
    }
}
